﻿using System;
using System.Collections.Generic;
using System.Text;

using Obsidian.Utils;
using Obsidian.Action;
using Obsidian.Web;
using Obsidian.Edm;
using Oak.Base;
using Oak.Model;
using Oak.MagSys.Data;

namespace Oak.MagSys.Logic
{
    public class FrameLG : OakLG<ISession>
    {
        public FrameLG(ISession session) : base(session) { }

        public List<MsFrameInfo> GetFrameList(MsFrameQry qry, out string msg)
        {

            if (!Session.IsAdmin)
            {
                msg = "当前没有权限执行该操作";
                return null;
            }

            FrameDA frameDA = new FrameDA();
            List<MsFrameInfo> list = frameDA.SelectList(qry);
            msg = "";
            return list;
        }

        public MsFrameInfo GetFrameById(long frameId, out string msg)
        {
            if (!Session.IsSuperAdmin)
            {
                msg = "当前没有权限执行该操作";
                return null;
            }

            MsFrameInfo frame = OModel.GetByPk<MsFrameInfo>(frameId);
            if (frame == null)
            {
                msg = "该框架信息不存在";
                return null;
            }
            msg = "";
            return frame;
        }

        public MsFrameInfo AddFrame(MsFrameInfo frame, out string msg)
        {
            if (!Session.IsSuperAdmin)
            {
                msg = "当前没有权限执行该操作";
                return null;
            }

            if (!VerifyFrame(frame, out msg))
                return null;

            try
            {
                frame.Save();
                msg = "";
                return frame;
            }
            catch (Exception ex)
            {
                msg = "保存信息错误";
                return null;
            }

        }

        public MsFrameInfo UpdateFrame(MsFrameInfo frame, out string msg)
        {
            if (!Session.IsSuperAdmin)
            {
                msg = "当前没有权限执行该操作";
                return null;
            }

            if (frame.FrameId.IsNull)
            {
                msg = "框架ID不能为空";
                return null;
            }

            MsFrameInfo dbFrame = this.GetFrameById(frame.FrameId.Value, out msg);
            if (dbFrame == null) return null;

            dbFrame.ResetAssigned();
            if (!frame.Title.IsNull)
                dbFrame.Title.Set(frame.Title.Value);
            if (!frame.Url.IsNull)
                dbFrame.Url.Set(frame.Url.Value);
            if (!frame.Ico.IsNull)
                dbFrame.Ico.Set(frame.Ico.Value);
            if (!frame.Options.IsNull)
                dbFrame.Options.Set(frame.Options.Value);

            if (!VerifyFrame(dbFrame, out msg))
                return null;

            try
            {
                dbFrame.Update();
                msg = "";
                return dbFrame;
            }
            catch (Exception ex)
            {
                msg = "保存信息错误";
                return null;
            }

        }

        public bool DeleteFrame(long frameId, out string msg)
        {
            if (!Session.IsSuperAdmin)
            {
                msg = "当前没有权限执行该操作";
                return false;
            }

            MsFrameInfo dbFrame = this.GetFrameById(frameId, out msg);
            if (dbFrame == null) return false;

            try
            {
                dbFrame.Delete();
                msg = "";
                return true;
            }
            catch (Exception ex)
            {
                msg = "操作失败";
                return false;
            }
        }

        internal static bool VerifyFrame(MsFrameInfo frame, out string msg)
        {
            if (frame.Title.IsNullOrEmpty)
            {
                msg = "标题不能为空";
                return false;
            }
            if (frame.Url.IsNullOrEmpty)
            {
                msg = "链接不能为空";
                return false;
            }
            msg = "";
            return true;
        }

    }
}
